%pylab inline
import numpy as np # convert list to array
import matplotlib.pyplot as plt
from ipywidgets import * #interaktivitáshoz szükséges függvények
from mpl_toolkits.mplot3d import * #3D-s ábrák alcsomagja
#from scipy import special
from scipy.special import jn,fresnel
from scipy.integrate import * # az integráló rutinok betöltése
Az alapon fekvő szög $\alpha$, és az alap hossza egységnyi.
$U(u,v) = \int_{\mathrm{apertura}} \, dx dy \, e^{i 2\pi (u x + v y)} = 2\left[\frac{u \cos\frac{u}{2} \mathrm{ctg} \alpha + i v \sin\frac{u}{2} }{u v^2-u^3 \mathrm{ctg}^2 \alpha}+ \frac{\mathrm{ctg} \alpha \, e^{i\frac{v}{2} \mathrm{tg} \alpha}}{u^2 \mathrm{ctg}^2 \alpha - v^2} \right]$
def haromszog_amp_exact(u,v,szog): # az alapon fekvő szög: 'szog'
tmp1 = 2*(u*cos(u/2)/tan(szog)+1j*v*sin(u/2))/(u*v**2-u**3/(tan(szog))**2)
tmp2 = 2*(1/tan(szog)*exp(1j*v/2*tan(szog)))/(u**2/(tan(szog))**2-v**2)
amp = tmp1+tmp2
amp2=abs(amp)**2
return(amp,amp2)
def haromszog_racs(Nxy):
a1, a2 = [1/Nxy, 0],[1/2/Nxy,sqrt(3)/2/Nxy]
xh = []
yh = []
for n1 in range(Nxy+1):
for n2 in range(Nxy-n1+1):
xh.append(n1*a1[0] + n2*a2[0])
yh.append(n1*a1[1] + n2*a2[1])
return(xh,yh)
xh, yh = haromszog_racs(10)
plot(xh,yh,'bs',ms=5)
grid();
haromszog_amp_exact(1,2,pi/3)
N_uv = 500 # a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
xyr = 50.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr
u,v = meshgrid(linspace(-xyr,xyr,N_uv),linspace(-xyr,xyr,N_uv)) #mintavételezési pontok legyártása
amp,amp2 = haromszog_amp_exact(u,v,pi/2*0.8)
figsize(8,6)
subplot(1,1,1,aspect=1)
intmax=0.001 # intmax=0.001
contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='viridis')
title('Háromszög alakú rés',fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
N_uv = 500 # a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
xyr = 50.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr
u,v = meshgrid(linspace(-xyr,xyr,N_uv),linspace(-xyr,xyr,N_uv)) #mintavételezési pontok legyártása
amp,amp2 = haromszog_amp_exact(u,v,pi/3)
figsize(8,6)
subplot(1,1,1,aspect=1)
intmax=0.001
contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='gray')
title('Háromszög alakú rés',fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
N_uv=500
xyr = 100.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr
v=linspace(-xyr,xyr,N_uv)
amp,amp2 = haromszog_amp_exact(1.0*(-8),v,pi/3)
plot(v,amp2);
grid()
def haromszog_play(szog, xyr, intmax, N_uv):
# N_uv = 500 # a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
# xyr = 50.0 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr
u,v = meshgrid(linspace(-xyr,xyr,N_uv),linspace(-xyr,xyr,N_uv)) #mintavételezési pontok legyártása
epsi = +10**(-8)
amp,amp2 = haromszog_amp_exact(u+epsi,v,szog*pi/180)
figsize(8,6)
subplot(1,1,1,aspect=1)
#intmax=0.001
contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='gray')
title('Háromszög alakú rés',fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
show();
interact(haromszog_play,
szog=FloatSlider(min=5,max=95,step=5,value=60,description=r'$\alpha$'),
xyr=FloatSlider(min=50,max=100,step=10,value=50,description='xyr'),
intmax=FloatSlider(min=0.0001,max=0.002,step=0.0001,value=0.001,description='Max int'),
N_uv=IntSlider(min=100,max=500,step=100,value=200,description='N_uv')
);
Belső sugár: $R_1$, külső sugár: $R_2$ és $R_1/R_2 < 1$, a külső sugár rögzített.
$U(\vartheta) = 2 \frac{x_2 J_1(x_2)-x_1 J_1(x_1)}{x_2^2},$ ahol $x_1 = k R_1 \sin\vartheta$ és $x_2 = k R_2 \sin\vartheta$.
Ha $R_1 \to 0$, akkor $U(\vartheta) = \frac{2 J_1(x_2)}{x_2}$.
def int_kor(x): # egy kor alaku res amplitudoja, intenzitasa
tmp = 4*(jn(1,x)/x)**2
return(tmp)
def int_korgyuru(x1,x2): # korgyuru alaku res amplitudoja, intenzitasa
amp = 2*(x2*jn(1,x2)- x1*jn(1,x1))/x2**2
amp2=(abs(amp))**2
return(amp,amp2)
3.8317/pi, 7.0156/pi
Nminta = 500 # a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
R1pR2= 0.87
R2=1
R1=0.15 # R1 < R2
R1pR2 = R1/R2 # R_1/R_2 <= 1
print("első minimum = sqrt(u_1^2+v1^2)= ", 1.22/2/R2)
print("második minimum = sqrt(u_1^2+v1^2)= ", 2.233/2/R2)
xyr = 3.0 # 12.1 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr
epsi=10**(-7) # azert kell,mert a kor alaku res intenzitasa divergal a kx=ky=0-nal,
# csak hataresetben ad helyes erteket.
u,v = meshgrid(linspace(-xyr,xyr,Nminta),linspace(-xyr,xyr,Nminta)) #mintavételezési pontok legyártása
amp2kor=int_kor(2*pi*R2*sqrt((u+epsi)**2+v**2)) #függvény kiértékelés
figsize(14,8)
#figsize(xfig_meret,yfig_meret)
subplot(1,2,1,aspect=1)
intmax=0.005
contourf(u,v,amp2kor,levels=linspace(0.,intmax,10),cmap='gray')
title('Egy kör alakú rés\n'+ r'$R_2 = $'+ str(R2),fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
#print("első minimum = sqrt(u_1^2+v1^2)= ", 1.22/2/Rpa)
#xyr = 7.0 # 12.1 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr
u,v = meshgrid(linspace(-xyr,xyr,Nminta),linspace(-xyr,xyr,Nminta)) #mintavételezési pontok legyártása
qq1=2*pi*R1*sqrt((u+epsi)**2+v**2)
qq2=2*pi*R2*sqrt((u+epsi)**2+v**2)
amp, amp2 = int_korgyuru(qq1,qq2) #függvény kiértékelés
figsize(12,8)
#figsize(xfig_meret,yfig_meret)
subplot(1,2,2,aspect=1)
intmax=0.005
contourf(u,v,amp2,levels=linspace(0.,intmax,10),cmap='gray')
title('Korgyuru alakú rés \n' + r'$R_1= $'+ str(R1) + r' $R_2 = $'+ str(R2),fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
Nminta = 200 # a (kx,ky) mintaveteli szama kx es ky menten, kulon-kulon
R1pR2= 0.87
R2=1
R1=0.15 # R1 < R2
R1pR2 = R1/R2 # R_1/R_2 <= 1
print(r'$R_2$ sugarú körre az első minimum = sqrt(u_1^2+v1^2)= ', 1.22/2/R2)
print(r'$R_2$ sugarú körre az második minimum = sqrt(u_1^2+v1^2)= ', 2.233/2/R2)
xyr = 3.0 # 12.1 # maximalis kx,ky tartomany, -xyr < kx,ky < xyr
epsi=10**(-7) # azert kell,mert a kor alaku res intenzitasa divergal a kx=ky=0-nal,
# csak hataresetben ad helyes erteket.
u = linspace(-xyr,xyr,Nminta)
v=0
qq1=2*pi*R1*sqrt((u+epsi)**2+v**2)
qq2=2*pi*R2*sqrt((u+epsi)**2+v**2)
amp, amp2 = int_korgyuru(qq1,qq2) #függvény kiértékelés
figsize(12,6)
#figsize(xfig_meret,yfig_meret)
subplot(1,2,2)
intmax=0.005
plot(u,amp2,'b-')
title('Korgyuru alakú rés \n' + r'$R_1= $'+ str(R1) + r' $R_2 = $'+ str(R2),fontsize=16);
xlabel(r'$u$',fontsize=20);
ylabel(r'$v$',fontsize=20);
grid();